1978번 소수 찾기

Day9 9단계 20231026


풀이 1

public class Eratos {
    public static void main(String[] args) {
        ArrayList<Boolean> primeList;
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        if(n <= 1) return;
        primeList = new ArrayList<Boolean>(n+1);
        primeList.add(false);
        primeList.add(false);
        for(int i=2; i<=n; i++ )
            primeList.add(i, true);
        for(int i=2; (i*i)<=n; i++){
            if(primeList.get(i)){
                for(int j = i*i; j<=n; j+=i) primeList.set(j, false);
            }
        }
        StringBuffer sb = new StringBuffer();
        sb.append("{");
        for(int i=0; i<=n; i++){
            if(primeList.get(i) == true){
                sb.append(i);
                sb.append(",");
            }
        }
        sb.setCharAt(sb.length()-1, '}');
        System.out.println(sb.toString());
    }
}

Eratosthenes.png

import java.io.*;
import java.util.*;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int n = Integer.parseInt(br.readLine());
		if (n == 1) { return; }
		
		int[] nums = new int[n];
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		for (int i = 0; i < n; i++) {
			nums[i] = Integer.parseInt(st.nextToken());
		}
		
		// making custom Eratosthenes set(from wikipedia)
		List<Boolean> eratos = new ArrayList<>();
		eratos.add(0, false); eratos.add(1, false); // 0과 1은 소수가 아님
		for (int i = 2; i <= 1000; i++) {
			eratos.add(i, true); // 먼저 모든 수를 소수라고 생각하고 true
		}
		for (int i = 2; i*i <= 1000; i++) { // i보다 작은 수의 배수는 i-1 처리 과정에서 삭제
			if (eratos.get(i)) {
				for (int j = i*i; j <= 1000; j+=i) { //i*i에서 i를 더하면 계속 i의 배수가 된다
					eratos.set(j, false); // 소수 아닌 수 제거
				}
			}
		}

		int count = 0;
		for(int i : nums) {
			if(eratos.get(i)) { count++; }
		}
		System.out.println(count);
		br.close();
	}
}

풀이 2

import java.io.*;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        BufferedReader reader;
        try {
            reader = new BufferedReader(new InputStreamReader(System.in));
            int size = Integer.parseInt(reader.readLine());
            String[] lines = reader.readLine().split(" ");
            ArrayList<Integer> primality = new ArrayList<>();
            loop: for(int i = 0; i < size; i++) {
                int target = Integer.parseInt(lines[i]);
                if (target == 1) continue;
                int sqrt = (int) Math.sqrt(target);
                for (int j = 2; j <= sqrt; j++) {
                    if (target % j == 0) continue loop;
                }
                primality.add(target);
            }
            System.out.println(primality.size());

        } catch (Exception e) {
        }
    }
}